約 2,913,200 件
https://w.atwiki.jp/chapati4it/pages/28.html
環境構築 Windows 環境構築 Ubuntu
https://w.atwiki.jp/sampleisbest/pages/153.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 dshow1 アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode ActiveMovie Windowで再生 .wmv .mpg .mp4 .avi 音声のみ再生 .wav .mp3 以下のファイルをインストールすることによりmp4動画の再生が可能になった。 MPC-HC_standalone_filters.1.6.5.6081.x86.ICL12.7z ffdshow_rev4486_20120825_clsid.exe また、音声のみ再生だったavi動画もffdshowにより動画も再生されるようになった。 フィルタグラフの様子はGraphEdit(graphedt.exe)にて確認できる。 いくつか見つかる場合はとりあえず最新のものを使う。 Windows SDK 7.1版 C \Program Files\Microsoft SDKs\Windows\v7.1\Bin DirectX 10.0 - Build 100513 作成日時:2010年5月13日、22 44 58 Windows Driver Kit 7.1.0版 C \WinDDK\7600.16385.1\tools\avstream\i386 DirectX 10.0 - Build 100208 作成日時:2010年2月8日、20 21 10 参考 とにもかくにもムービー再生! GraphEditツールでフィルタを知ろう MP4 Splitter - k本的に無料ソフト・フリーソフト dshow1.cpp /* インクルード・ライブラリとも以下のディレクトリを参照していると思われる。 C \Program Files\Microsoft SDKs\Windows\v7.0A Unicode文字セット */ #pragma comment(lib, "strmiids.lib") //#include Windows.h #include DShow.h //============================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { IGraphBuilder*pGraph = NULL; IMediaControl*pControl = NULL; IMediaEvent*pEvent = NULL; HRESULT hr; ULONG ur; // COMライブラリの初期化 hr = CoInitialize(NULL); if (FAILED(hr)) { return 0; } // フィルタグラフマネージャ hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS( pGraph)); if (FAILED(hr)) { return 0; } hr = pGraph- QueryInterface(IID_PPV_ARGS( pControl)); hr = pGraph- QueryInterface(IID_PPV_ARGS( pEvent)); hr = pGraph- RenderFile(L"c \\tmp\\hoge.mpg", NULL); if (SUCCEEDED(hr)) { hr = pControl- Run(); if (SUCCEEDED(hr)) { long evCode; pEvent- WaitForCompletion(10000, evCode);// 10秒 } } ur = pControl- Release(); ur = pEvent- Release(); ur = pGraph- Release(); CoUninitialize(); return 0; }
https://w.atwiki.jp/sampleisbest/pages/70.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 BmpViewer アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode 作成中。 参考 Win32API(C言語)編 第22章 ビットマップを表示する DIBをBMPファイルに保存する BmpViewer.c #include tchar.h #include Windows.h #include "resource.h" // 関数プロトタイプ宣言 ATOMMyRegisterClass(HINSTANCE hInstance); BOOLInitInstance(HINSTANCE hInstance, int nCmdShow); LRESULT CALLBACKWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); voidOnFileOpen(HWND hWnd); voidOnFileSaveAs(HWND hWnd); voidOnEditPaste(HWND hWnd); voidOnPaint(HWND hWnd); // グローバル変数 TCHARg_atcClassName[] = _T("BmpViewer"); TCHARg_atcWindowName[] = _T("Bitmap Viewer"); HINSTANCEg_hInstance; TCHARg_atcFileName[MAX_PATH]; HANDLEg_hBitmap = NULL; //============================================================================== int APIENTRY _tWinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance, LPTSTRlpCmdLine, intnCmdShow) { MSGmsg; HACCELhAccelTable; MyRegisterClass(hInstance); if (InitInstance(hInstance, nCmdShow) == FALSE) { return 0; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDR_MAINFRAME); while (GetMessage( msg, NULL, 0, 0)) { if (TranslateAccelerator(msg.hwnd, hAccelTable, msg) == 0) { TranslateMessage( msg); DispatchMessage( msg); } } return msg.wParam; } //------------------------------------------------------------------------------ ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXwcex; wcex.cbSize= sizeof (WNDCLASSEX); wcex.style= CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc= WndProc; wcex.cbClsExtra= 0; wcex.cbWndExtra= 0; wcex.hInstance= hInstance; wcex.hIcon= LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor= LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName= (LPCTSTR)IDR_MAINFRAME; wcex.lpszClassName= g_atcClassName; wcex.hIconSm= LoadIcon(NULL, IDI_APPLICATION); return RegisterClassEx( wcex); } //------------------------------------------------------------------------------ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWNDhWnd; g_hInstance = hInstance; hWnd = CreateWindow( g_atcClassName, g_atcWindowName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_PAINT OnPaint(hWnd); break; case WM_COMMAND switch (LOWORD(wParam)) { case ID_FILE_OPEN OnFileOpen(hWnd); break; case ID_FILE_SAVE_AS OnFileSaveAs(hWnd); break; case ID_APP_EXIT DestroyWindow(hWnd); break; case ID_EDIT_PASTE OnEditPaste(hWnd); break; default return DefWindowProc(hWnd, uMsg, wParam, lParam); } break; case WM_DESTROY if (g_hBitmap) { DeleteObject(g_hBitmap); } PostQuitMessage(0); break; default return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; } //------------------------------------------------------------------------------ void OnFileOpen(HWND hWnd) { OPENFILENAMEofn; ZeroMemory( ofn, sizeof (OPENFILENAME)); ofn.lStructSize= sizeof (OPENFILENAME); ofn.hwndOwner= hWnd; ofn.lpstrFilter= _T("ビットマップ ファイル (*.bmp)\0*.bmp\0"); ofn.Flags= OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrFile= g_atcFileName; ofn.nMaxFile= _countof(g_atcFileName); if (GetOpenFileName( ofn) == FALSE) { return; } if (g_hBitmap) { DeleteObject(g_hBitmap); } //g_hBitmap = LoadImage(NULL, g_atcFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); g_hBitmap = LoadImage(NULL, g_atcFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); if (g_hBitmap == NULL) { MessageBox(hWnd, _T("画像の読み込みに失敗しました"), NULL, MB_OK); return; } InvalidateRect(hWnd, NULL, TRUE); } //------------------------------------------------------------------------------ void OnFileSaveAs(HWND hWnd) { OPENFILENAMEofn; DIBSECTIONds; BITMAPFILEHEADERbmfh; HANDLEhFile; DWORDdw; inti; if (g_hBitmap == NULL) { return; } ZeroMemory( ofn, sizeof (OPENFILENAME)); ofn.lStructSize= sizeof (OPENFILENAME); ofn.hwndOwner= hWnd; ofn.lpstrFilter= _T("ビットマップ ファイル (*.bmp)\0*.bmp\0"); ofn.Flags= OFN_HIDEREADONLY; ofn.lpstrFile= g_atcFileName; ofn.nMaxFile= _countof(g_atcFileName); ofn.lpstrDefExt= _T("bmp"); if (GetSaveFileName( ofn) == FALSE) { return; } i = GetObject(g_hBitmap, sizeof ds, ds); ZeroMemory( bmfh, sizeof bmfh); bmfh.bfType= 0x4d42;// "BM" bmfh.bfOffBits= sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER); bmfh.bfSize= bmfh.bfOffBits + ds.dsBmih.biSizeImage; hFile = CreateFile(g_atcFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { return; } WriteFile(hFile, bmfh, sizeof bmfh, dw, NULL); WriteFile(hFile, ds.dsBmih, sizeof (BITMAPINFOHEADER), dw, NULL); WriteFile(hFile, ds.dsBm.bmBits, ds.dsBmih.biSizeImage, dw, NULL); CloseHandle(hFile); } //------------------------------------------------------------------------------ void OnEditPaste(HWND hWnd) { HANDLEhBmpClip; DWORDdw; if (IsClipboardFormatAvailable(CF_BITMAP) == FALSE) { return; } OpenClipboard(hWnd); hBmpClip = GetClipboardData(CF_BITMAP); //hBmpClip = GetClipboardData(CF_DIB);// CopyImageで失敗する if (g_hBitmap) { DeleteObject(g_hBitmap); } //g_hBitmap = CopyImage(hBmpClip, IMAGE_BITMAP, 0, 0, 0); g_hBitmap = CopyImage(hBmpClip, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); if (g_hBitmap == NULL) { dw = GetLastError(); } CloseClipboard(); InvalidateRect(hWnd, NULL, TRUE); } //------------------------------------------------------------------------------ void OnPaint(HWND hWnd) { PAINTSTRUCTps; HDChdc; HDChdcMem; RECTrcClient; BITMAPbm; intiWidthDest; intiHeightDest; intiX; intiY; hdc = BeginPaint(hWnd, ps); if (g_hBitmap == NULL) { goto Exit; } hdcMem = CreateCompatibleDC(hdc); SelectObject(hdcMem, g_hBitmap); GetClientRect(hWnd, rcClient); GetObject(g_hBitmap, sizeof bm, bm); if (bm.bmWidth = rcClient.right bm.bmHeight = rcClient.bottom) { // クライアント領域に収まる場合 iWidthDest = bm.bmWidth; iHeightDest = bm.bmHeight; } else { // ビットマップとクライアント領域のアスペクト比を比較し // アスペクト比を維持したままクライアント領域に収める if (bm.bmWidth bm.bmHeight * rcClient.right / rcClient.bottom) { iWidthDest = rcClient.bottom * bm.bmWidth / bm.bmHeight; iHeightDest = rcClient.bottom; } else { iWidthDest = rcClient.right; iHeightDest = rcClient.right * bm.bmHeight / bm.bmWidth; } } iX = (rcClient.right - iWidthDest) / 2; iY = (rcClient.bottom - iHeightDest) / 2; StretchBlt(hdc, iX, iY, iWidthDest, iHeightDest, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); /* BitBlt(hdc, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right - ps.rcPaint.left, ps.rcPaint.bottom - ps.rcPaint.top, hdcMem, ps.rcPaint.left, ps.rcPaint.top, SRCCOPY); */ DeleteDC(hdcMem); Exit EndPaint(hWnd, ps); } resource.h #define IDR_MAINFRAME128 #define ID_FILE_OPEN129 #define ID_FILE_SAVE_AS130 #define ID_APP_EXIT131 #define ID_EDIT_PASTE132 BmpViewer.rc // リソーススクリプト #include "resource.h" //------------------------------------------------------------------------------ // メニュー IDR_MAINFRAME MENU BEGIN POPUP "ファイル( F)" BEGIN MENUITEM "開く( O)...\tCtrl+O", ID_FILE_OPEN //MENUITEM "上書き保存( S)\tCtrl+S", ID_FILE_SAVE MENUITEM "名前を付けて保存( A)...", ID_FILE_SAVE_AS MENUITEM SEPARATOR MENUITEM "アプリケーションの終了( X)", ID_APP_EXIT END POPUP "編集( E)" BEGIN MENUITEM "貼り付け( P)\tCtrl+V", ID_EDIT_PASTE END END //------------------------------------------------------------------------------ // アクセラレータ IDR_MAINFRAME ACCELERATORS BEGIN "O",ID_FILE_OPEN,VIRTKEY,CONTROL "S",ID_FILE_SAVE_AS,VIRTKEY,CONTROL "V",ID_EDIT_PASTE,VIRTKEY,CONTROL END
https://w.atwiki.jp/gtavi_gta6/pages/2110.html
Great Big Tats 概要 解説 店舗、外見など 概要 日本語:グレートビッグタッツ 業種:小売業 所在地:ベスプッチ - ベスプッチビーチ 解説 タトゥー屋。 店舗、外見など
https://w.atwiki.jp/tracking_quizshow/pages/89.html
問題 問題画像 問題文 作品名を解読してださい。0dhoaynzg pxcmwqielvjtrubksf179317628618943179187628729524628179187351作者:TERAGRAM作品名:781294816781294425781254836369349 回答 解説 補足 Big/bq081と同じ問題です
https://w.atwiki.jp/quicktimeprogramer/pages/6.html
2006.3.10 Universal化のメモ AppleEvent経由でのUnicode文字列の取得はendianを考慮する必要があるため、 utxt から ut16 (typeUTF16ExternalRepresentation) に変更。 Picture(PICT)の画像サイズ picFrame はbig endian。 ユーザー設定はstructureをそのまま渡してたんで、手作業でswap。 Jacket plugin yfelhgbLR -- kbjboxnukec (2009-07-05 09 23 21) 名前 コメント Visitors -
https://w.atwiki.jp/u571/pages/1.html
ウィキはみんなで気軽にホームページ編集できるツールです。 このページは自由に編集することができます。 メールで送られてきたパスワードを用いてログインすることで、各種変更(サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等)することができます ■ 新しいページを作りたい!! ページの下や上に「新規作成」というリンクがあるので、それをクリックしてください。 ■ 表示しているページを編集したい! ページ上の「このページを編集」というリンクや、ページ下の「編集」というリンクを押してください。 ■ ブログサイトの更新情報を自動的に載せたい!! お気に入りのブログのRSSを使っていつでも新しい情報を表示できます。詳しくはこちらをどうぞ。 ■ ニュースサイトの更新情報を自動的に載せたい!! RSSを使うと簡単に情報通になれます、詳しくはこちらをどうぞ。 ■ その他にもいろいろな機能満載!! 詳しくは、FAQ・初心者講座@wikiをみてね☆ 分からないことは? @wikiの詳しい使い方はヘルプ・FAQ・初心者講座@wikiをごらんください。メールでのお問い合わせも受け付けております。 ユーザ同士のコミュニケーションにはたすけあい掲示板をご利用ください 要望・バグ・不具合報告はメールでお気軽にお問い合わせください。
https://w.atwiki.jp/xbox360analysis/pages/69.html
Ninja Gaiden 2 チェックサム ENDIAN(BIG) CSUM == 0 CSUM = DWADD(D000,1487F) WRITE(14880,4) SHOW お金 0x00D028から4バイト セーブエディター http //www1.axfc.net/uploader/Sc/so/370652.zip key=NINJA ※文字化けするが日本版で使用可能。改造項目は Readme を参照すればわかる。
https://w.atwiki.jp/sampleisbest/pages/296.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 MultiTimer アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト ダウンロード MultiTimer_20130706.zip MultiTimer_20130731.zip 参考 スタティックコントロール MultiTimer.cpp #pragma comment(lib, "winmm") #include Windows.h #include WindowsX.h #include CommCtrl.h #include wchar.h #include time.h #include "resource.h" #define TIMER_MAX20 #define SECTTEXT("General") #define APP_NAMETEXT("MultiTimer") #define IDC_CLOCK1000 #define IDC_EDIT1100 #define IDC_TIMER1200 enum STATUS { OFF = 0, ON, WARN1, WARN2, END, COUNTUP, }; typedef struct { STATUS status; time_t time; //int sec; BOOL tool; } TimerList; // 外部変数 HINSTANCE hInst; TCHAR iniFile[MAX_PATH]; HFONT hFontEdit; HFONT hFontTimer; HBRUSH hBrush[COUNTUP+1]; HWND hTool; HWND hClock; INT_PTR uIDEvent; time_t timer; TimerList tl[TIMER_MAX]; size_t timerNum; int nearest = -1; int warnSec[2]; UINT uTime; // 関数プロトタイプ宣言 void GetIniFileName(); void Trace(LPCTSTR format, ...); INT_PTR CALLBACK DlgMain(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnInitDialog(HWND hDlg, LPARAM lParam); void OnDestroy(HWND hDlg); INT_PTR OnCtlColorStatic(WPARAM wParam, LPARAM lParam); void OnTimer(HWND hDlg); void OnXButtonDown(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnLButtonDown(HWND hDlg, size_t i); void SetTimerList(HWND hDlg, size_t i, STATUS status, time_t time); void Nearest(); void AddTool(HWND hDlg, size_t i); INT_PTR CALLBACK DlgInput(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); //============================================================================== int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { hInst = hInstance; GetIniFileName(); DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgMain); return 0; } void GetIniFileName() { TCHAR path[_MAX_PATH]; TCHAR drive[_MAX_DRIVE]; TCHAR dir[_MAX_DIR]; TCHAR fname[_MAX_FNAME]; TCHAR ext[_MAX_EXT]; GetModuleFileName(NULL, path, _countof(path)); _wsplitpath_s(path, drive, dir, fname, ext); _wmakepath_s(iniFile, drive, dir, fname, L"ini"); } void Trace(LPCTSTR format, ...) { va_list arg_ptr; va_start(arg_ptr, format); TCHAR buffer[256]; int size = _vsnwprintf_s(buffer, _TRUNCATE, format, arg_ptr); va_end(arg_ptr); OutputDebugString(buffer); if (size 0) { OutputDebugString(L"...\n"); } } //============================================================================== INT_PTR CALLBACK DlgMain(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR res = TRUE;// メッセージを処理した switch (uMsg) { case WM_TIMER OnTimer(hDlg); break; case WM_CTLCOLORSTATIC return OnCtlColorStatic(wParam, lParam); case WM_LBUTTONDOWN case WM_RBUTTONDOWN OnXButtonDown(hDlg, uMsg, wParam, lParam); break; case WM_INITDIALOG OnInitDialog(hDlg, lParam); //res = FALSE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE EndDialog(hDlg, 0); break; case WM_ENDSESSION if (wParam == TRUE) { EndDialog(hDlg, 0); } break; case WM_DESTROY OnDestroy(hDlg); break; default res = FALSE;// メッセージを処理しなかった } return res; } void OnInitDialog(HWND hDlg, LPARAM lParam) { //LPCREATESTRUCT pcs = (LPCREATESTRUCT)lParam; timerNum= GetPrivateProfileInt(SECT, L"TimerNum", 0, iniFile); warnSec[0]= GetPrivateProfileInt(SECT, L"WarningSec1", 120, iniFile); warnSec[1]= GetPrivateProfileInt(SECT, L"WarningSec2", 65, iniFile); int X= GetPrivateProfileInt(SECT, L"X", 100, iniFile); int Y= GetPrivateProfileInt(SECT, L"Y", 100, iniFile); if (timerNum 1) timerNum = 11; if (TIMER_MAX timerNum) timerNum = TIMER_MAX; RECT rw; RECT rc; GetWindowRect(hDlg, rw); GetClientRect(hDlg, rc); int cx = (rw.right - rw.left) - rc.right + 210; int cy = (rw.bottom - rw.top) - rc.bottom + 35 + 25 * timerNum; SetWindowPos(hDlg, HWND_TOP, X, Y, cx, cy, 0); // フォント作成 LOGFONT lf; ZeroMemory( lf, sizeof lf); lf.lfCharSet= DEFAULT_CHARSET; lf.lfHeight= 16; wcscpy_s(lf.lfFaceName, L"MS Pゴシック"); hFontEdit = CreateFontIndirect( lf); lf.lfHeight= 24; wcscpy_s(lf.lfFaceName, L"Arial"); hFontTimer = CreateFontIndirect( lf); // ブラシ hBrush[OFF]= (HBRUSH)GetStockObject(LTGRAY_BRUSH); hBrush[ON]= (HBRUSH)GetStockObject(WHITE_BRUSH); hBrush[WARN1]= CreateSolidBrush(RGB(0x00,0xff,0xff)); hBrush[WARN2]= CreateSolidBrush(RGB(0x00,0xff,0x00)); hBrush[END]= CreateSolidBrush(RGB(0x00,0xff,0x00)); hBrush[COUNTUP]= CreateSolidBrush(RGB(0xff,0xff,0x7f)); // 時計 hClock = CreateWindowEx(WS_EX_CLIENTEDGE, WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | SS_CENTER, 105, 5, 100, 25, hDlg, (HMENU)IDC_CLOCK, hInst, NULL); SendMessage(hClock, WM_SETFONT, (WPARAM)hFontTimer, MAKELPARAM(FALSE, 0)); // ツールチップ hTool = CreateWindowEx(0, TOOLTIPS_CLASS, NULL, TTS_ALWAYSTIP, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, hDlg, NULL, hInst, NULL); // タイマー for (size_t i = 0; i timerNum; i++) { HWND hWnd; int y = 30 + 25 * i; hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, 5, y, 100, 25, hDlg, HMENU(IDC_EDIT + i), hInst, NULL); SendMessage(hWnd, WM_SETFONT, (WPARAM)hFontEdit, MAKELPARAM(FALSE, 0)); hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | SS_CENTER/* | SS_NOTIFY*/, 105, y, 100, 25, hDlg, HMENU(IDC_TIMER + i), hInst, NULL); SendMessage(hWnd, WM_SETFONT, (WPARAM)hFontTimer, MAKELPARAM(FALSE, 0)); TCHAR key[16]; TCHAR buf[256]; swprintf_s(key, L"Edit%d", i); GetPrivateProfileString(SECT, key, NULL, buf, _countof(buf), iniFile); SetDlgItemText(hDlg, IDC_EDIT + i, buf); swprintf_s(key, L"Timer%d", i); GetPrivateProfileString(SECT, key, NULL, buf, _countof(buf), iniFile); time_t time = 0LL; swscanf_s(buf, L"%lld", time); if (time) { tl[i].status= ON; tl[i].time= time; AddTool(hDlg, i); } } Nearest(); time( timer); uIDEvent = SetTimer(hDlg, 1, 1000, NULL); } void OnDestroy(HWND hDlg) { WINDOWPLACEMENT wp; wp.length = sizeof wp; GetWindowPlacement(hDlg, wp); TCHAR buf[256]; swprintf_s(buf, L"%d", wp.rcNormalPosition.left); WritePrivateProfileString(SECT, L"X", buf, iniFile); swprintf_s(buf, L"%d", wp.rcNormalPosition.top); WritePrivateProfileString(SECT, L"Y", buf, iniFile); for (size_t i = 0; i timerNum; i++) { TCHAR key[16]; swprintf_s(key, L"Edit%d", i); GetDlgItemText(hDlg, IDC_EDIT + i, buf, _countof(buf)); WritePrivateProfileString(SECT, key, buf, iniFile); swprintf_s(key, L"Timer%d", i); swprintf_s(buf, L"%lld", (tl[i].status == ON) ? tl[i].time 0LL); WritePrivateProfileString(SECT, key, buf, iniFile); } DeleteObject(hFontEdit); DeleteObject(hFontTimer); for (int i = 0; i _countof(hBrush); i++) { DeleteObject(hBrush[i]); } KillTimer(hDlg, uIDEvent); } INT_PTR OnCtlColorStatic(WPARAM wParam, LPARAM lParam) { LONG id = GetWindowLong((HWND)lParam, GWL_ID); if (id == IDC_CLOCK) { return (INT_PTR)hBrush[ON]; } size_t i = id - IDC_TIMER; if (i timerNum) { HDC hdc = (HDC)wParam; SetBkMode(hdc, TRANSPARENT); if (i == nearest) { SetTextColor(hdc, RGB(0xff,0x00,0x00)); } return (INT_PTR)hBrush[tl[i].status]; } return FALSE; } void OnTimer(HWND hDlg) { TCHAR buf[8+1]; time( timer); tm tm; localtime_s( tm, timer); swprintf_s(buf, L"%2d %02d %02d", tm.tm_hour, tm.tm_min, tm.tm_sec); SetWindowText(hClock, buf); for (size_t i = 0; i timerNum; i++) { switch (tl[i].status) { case ON case WARN1 case WARN2 { int sec = int(tl[i].time - timer); if (tl[i].status == ON sec = warnSec[0]) { tl[i].status = WARN1; Nearest(); } if (tl[i].status == WARN1 sec = warnSec[1]) { tl[i].status = WARN2; TCHAR path[MAX_PATH]; GetPrivateProfileString(SECT, L"WaveFile", L"sample.wav", path, _countof(path), iniFile); PlaySound(path, NULL, SND_FILENAME | SND_ASYNC); } if (sec = 0) { sec = 0; tl[i].status = END; } //tl[i].sec = sec; swprintf_s(buf, L"%2d %02d %02d", sec / 3600, (sec / 60) % 60, sec % 60); SetDlgItemText(hDlg, IDC_TIMER + i, buf); } break; case COUNTUP { int sec = int(timer - tl[i].time); if (99 * 3600 + 59 * 60 + 59 sec) { sec = 0; tl[i].status = END; } swprintf_s(buf, L"%2d %02d %02d", sec / 3600, (sec / 60) % 60, sec % 60); SetDlgItemText(hDlg, IDC_TIMER + i, buf); } break; } } } void OnXButtonDown(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); HWND hChild = ChildWindowFromPoint(hDlg, pt); LONG id = GetWindowLong(hChild, GWL_ID); //Trace(L"OnXButtonDown(%d, %d, %d)\n", pt.x, pt.y, id); size_t i = id - IDC_TIMER; if (i timerNum) { switch (uMsg) { case WM_LBUTTONDOWN OnLButtonDown(hDlg, i); break; case WM_RBUTTONDOWN tl[i].status = OFF; SetDlgItemText(hDlg, IDC_TIMER + i, NULL); Nearest(); break; } } } void OnLButtonDown(HWND hDlg, size_t i) { INT_PTR ret = DialogBox(hInst, MAKEINTRESOURCE(IDD_INPUT), hDlg, DlgInput); switch (ret) { case IDC_TIME1 // 残り時間 { int sec = (uTime / 10000) * 3600 + ((uTime / 100) % 100) * 60 + (uTime % 100); SetTimerList(hDlg, i, ON, timer + sec); } break; case IDC_TIME2 // 時刻指定 { tm tm; localtime_s( tm, timer); tm.tm_hour= uTime / 100; tm.tm_min= uTime % 100; tm.tm_sec= 0; time_t time = mktime( tm); if (time = timer) { time += 24 * 60 * 60; } SetTimerList(hDlg, i, ON, time); } break; case IDC_COUNTUP // カウントアップ { SetTimerList(hDlg, i, COUNTUP, timer); } break; } } void SetTimerList(HWND hDlg, size_t i, STATUS status, time_t time) { tl[i].status= status; tl[i].time= time; AddTool(hDlg, i); Nearest(); } void Nearest() { time_t time; nearest = -1; for (size_t i = 0; i timerNum; i++) { if (tl[i].status == ON) { if (nearest 0 || tl[i].time time) { nearest = i; time = tl[i].time; } } } } void AddTool(HWND hDlg, size_t i) { RECT rc; GetWindowRect(GetDlgItem(hDlg, IDC_TIMER + i), rc); MapWindowPoints(NULL, hDlg, (LPPOINT) rc, 2); TCHAR buf[8+1]; tm tm; localtime_s( tm, tl[i].time); swprintf_s(buf, L"%d %02d %02d", tm.tm_hour, tm.tm_min, tm.tm_sec); TOOLINFO ti; ti.cbSize= sizeof ti - 4;// ComCtl32.dll ver 5.0 ti.uFlags= TTF_SUBCLASS; ti.hwnd= hDlg; ti.uId= i; ti.rect= rc; ti.lpszText= buf; if (tl[i].tool) { SendMessage(hTool, TTM_DELTOOL, 0, (LPARAM) ti); } else { tl[i].tool = TRUE; } SendMessage(hTool, TTM_ADDTOOL, 0, (LPARAM) ti); } //============================================================================== INT_PTR CALLBACK DlgInput(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR res = TRUE;// メッセージを処理した switch (uMsg) { case WM_COMMAND { WORD wCtrlId = LOWORD(wParam); switch (wCtrlId) { case IDOK { BOOL trans; uTime = GetDlgItemInt(hDlg, IDC_TIME1, trans, FALSE); if (trans) { if (uTime = 995959) { EndDialog(hDlg, IDC_TIME1); break; } } uTime = GetDlgItemInt(hDlg, IDC_TIME2, trans, FALSE); if (trans) { if (uTime = 2359 uTime % 100 60) { EndDialog(hDlg, IDC_TIME2); break; } } MessageBeep(MB_ICONWARNING); } break; case IDC_COUNTUP case IDCANCEL EndDialog(hDlg, wCtrlId); break; } } break; case WM_INITDIALOG //res = FALSE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE EndDialog(hDlg, IDCANCEL); break; default res = FALSE;// メッセージを処理しなかった } return res; } resource.h #define IDD_MAIN100 #define IDD_INPUT101 #define IDC_STATIC-1 #define IDC_TIME11000 #define IDC_TIME21001 #define IDC_COUNTUP1002 MultiTimer.rc // resource script #include Windows.h #include "resource.h" IDD_MAIN DIALOGEX 0, 0, 0, 0 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "MultiTimer" BEGIN END IDD_INPUT DIALOG 0, 0, 115, 60 STYLE WS_POPUPWINDOW CAPTION "タイマー設定" FONT 9, "MS Pゴシック" BEGIN LTEXT"残り時間 (hhmmss)",IDC_STATIC,5,8,75,15 EDITTEXTIDC_TIME1,80,6,30,13 LTEXT"時刻指定 (hhmm)",IDC_STATIC,5,23,75,15 EDITTEXTIDC_TIME2,80,21,30,13 PUSHBUTTON"OK",IDOK,5,40,50,15 PUSHBUTTON"カウントアップ",IDC_COUNTUP,60,40,50,15 END
https://w.atwiki.jp/sampleisbest/pages/66.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 huffman アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト 作成中。 参考 ハフマン符号 - Wikipedia huffman.cpp #include map // 型定義 typedef unsigned charUCHAR; typedef struct { intaiChild[2]; } TreeNode; typedef struct { intiCode; intiSize; } CodeInfo; typedef struct { intiCount; intiIndex; } DecIndex; typedef struct { intiCode; intiValue; } DecTable; typedef std multimap int,int mmii; // 関数プロトタイプ宣言 void dfs(int iIndex, int iCode, int iSize); int Encode(int iCode, int iSize); int Decode(int iDataLen); int FetchBit(); // グローバル変数 static TreeNodeg_aTreeNode[511]; static CodeInfog_aCodeInfo[256]; static DecIndexg_aDecIndex[16]; static DecTableg_aDecTable[256]; static UCHARg_aucCode[1024]; static intg_iCodeIndex = 0; static UCHARg_aucDecBuf[1024]; static intg_iDecIndex; int main() { UCHARaucData[] = "government of the people, by the people, for the people"; intaiCount[256] = {0}; mmiimmQueue; mmii iteratorit; characStr[32+1]; intiCount; inti; // 各バイト値の発生回数を数える int iDataLen = strlen((char*)aucData); for (i = 0; i iDataLen; i++) { aiCount[aucData[i]]++; } for (i = 0; i 256; i++) { if (aiCount[i] == 0) { continue; } printf(" %c =%d\n", i, aiCount[i]); } // ハフマン木を作成 for (i = 0; i 256; i++) { if (aiCount[i]) { mmQueue.insert(mmii value_type(aiCount[i], i)); } } int iIndex = 256; while (1 mmQueue.size()) { int aiKey[2]; iCount = 0; for (i = 0; i 2; i++) { it = mmQueue.begin(); aiKey[i]= (*it).first; g_aTreeNode[iIndex].aiChild[i]= (*it).second; mmQueue.erase(it); iCount += aiKey[i]; } mmQueue.insert(mmii value_type(iCount, iIndex)); printf("0x%02X(%d) = 0x%02X(%d) + 0x%02X(%d)\n", iIndex, iCount, g_aTreeNode[iIndex].aiChild[0], aiKey[0], g_aTreeNode[iIndex].aiChild[1], aiKey[1]); iIndex++; } it = mmQueue.begin(); int iRoot = (*it).second; // 深さ優先探索でバイト値→符号情報を作成 dfs(iRoot, 0, 0); for (i = 0; i 256; i++) { int iSize = g_aCodeInfo[i].iSize; if (iSize == 0) { continue; } _ltoa_s(0x80000000 | g_aCodeInfo[i].iCode, acStr, _countof(acStr), 2); printf(" %c =%d %s\n", i, iSize, acStr + 32 - iSize); } // 符号化 for (i = 0; i iDataLen; i++) { Encode(g_aCodeInfo[aucData[i]].iCode, g_aCodeInfo[aucData[i]].iSize); } Encode(0, 0); for (i = 0; i g_iCodeIndex; i++) { _ltoa_s(0x100 | g_aucCode[i], acStr, _countof(acStr), 2); printf("%s%c", acStr + 1, " - \n"[i % 8]); } if (i % 8) { printf("\n"); } // 復号テーブル作成 int iDecIndex = 0; for (iIndex = 0; iIndex 16; iIndex++) { g_aDecIndex[iIndex].iIndex = iDecIndex; iCount = 0; for (i = 0; i 256; i++) { if (g_aCodeInfo[i].iSize != iIndex + 1) { continue; } g_aDecTable[iDecIndex].iValue = i; g_aDecTable[iDecIndex].iCode = g_aCodeInfo[i].iCode; iDecIndex++; iCount++; } g_aDecIndex[iIndex].iCount = iCount; } // 復号 Decode(iDataLen); g_aucDecBuf[g_iDecIndex] = 0x00; printf("%s\n", g_aucDecBuf); return 0; } // 深さ優先探索でバイト値→符号情報を作成 void dfs(int iIndex, int iCode, int iSize) { if (iIndex 256) { g_aCodeInfo[iIndex].iCode = iCode; g_aCodeInfo[iIndex].iSize = iSize; } else { dfs(g_aTreeNode[iIndex].aiChild[0], iCode 1, iSize + 1); dfs(g_aTreeNode[iIndex].aiChild[1], iCode 1 | 1, iSize + 1); } } // 符号化 int Encode(int iCode, int iSize) { static ints_iCode; static ints_iSize = 0; if (iSize == 0) { if (s_iSize) { s_iCode = s_iCode (8 - s_iSize) | 0xFF s_iSize; g_aucCode[g_iCodeIndex++] = s_iCode; } return 0; } s_iCode = s_iCode iSize | iCode; s_iSize += iSize; while (8 = s_iSize) { s_iSize -= 8; g_aucCode[g_iCodeIndex++] = s_iCode s_iSize; } return 0; } // 復号 int Decode(int iDataLen) { intiCode; intiSize; intiBit; intiIndex; intiValue; inti; for (g_iDecIndex = 0; g_iDecIndex iDataLen; g_iDecIndex++) { iCode= 0; iSize= 0; for (iValue = -1; iValue == -1; ) { iBit = FetchBit(); iCode = iCode 1 | iBit; iSize++; iIndex = g_aDecIndex[iSize - 1].iIndex; for (i = 0; i g_aDecIndex[iSize - 1].iCount; i++) { if (g_aDecTable[iIndex + i].iCode == iCode) { iValue = g_aDecTable[iIndex + i].iValue; break; } } } g_aucDecBuf[g_iDecIndex] = iValue; } return 0; } int FetchBit() { static intiCodeIndex = 0; static intiCodeBit = 7; inti; i = g_aucCode[iCodeIndex] iCodeBit 0x01; if (--iCodeBit 0) { iCodeIndex++; iCodeBit = 7; } return i; } 出力 =9 , =2 b =1 e =11 f =2 g =1 h =3 l =3 m =1 n =2 o =6 p =6 r =2 t =4 v =1 y =1 0x100(2) = 0x62(1) + 0x67(1) 0x101(2) = 0x6D(1) + 0x76(1) 0x102(3) = 0x79(1) + 0x2C(2) 0x103(4) = 0x66(2) + 0x6E(2) 0x104(4) = 0x72(2) + 0x100(2) 0x105(5) = 0x101(2) + 0x68(3) 0x106(6) = 0x6C(3) + 0x102(3) 0x107(8) = 0x74(4) + 0x103(4) 0x108(9) = 0x104(4) + 0x105(5) 0x109(12) = 0x6F(6) + 0x70(6) 0x10A(14) = 0x106(6) + 0x107(8) 0x10B(18) = 0x20(9) + 0x108(9) 0x10C(23) = 0x65(11) + 0x109(12) 0x10D(32) = 0x10A(14) + 0x10B(18) 0x10E(55) = 0x10C(23) + 0x10D(32) =3 110 , =5 10011 b =6 111010 e =2 00 f =5 10110 g =6 111011 h =5 11111 l =4 1000 m =6 111100 n =5 10111 o =3 010 p =3 011 r =5 11100 t =4 1010 v =6 111101 y =5 10010 11101101 01111010 01110010 11111110-00010111 10101100 10101101 10101011 11100110 01100010 01110000 01001111-01110101 00101101 01011111 00110011 00010011 10000010 01111010 11001011-10011010 10111110 01100110 00100111 00000111 government of the people, by the people, for the people